﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Aprendete.Models;

namespace Aprendete.Controllers
{
    

    public class TutoriasController : Controller
    {
        TutoriaAdmin tutAdmin = new TutoriaAdmin();
        UsuarioRepository usuarioRepo = new UsuarioRepository();
        AsignaturaRepository asignRepo = new AsignaturaRepository();
        TutoriaRepository tutRepo = new TutoriaRepository();
        InscritoAdmin inscritoAdmin = new InscritoAdmin();

        //
        // GET: /Tutorias/

        public ActionResult Index()
        {
            
            return View();
        }


        public ActionResult Inscripciones()
        {
            List<Tutoria> lista;
            try
            {
                Usuario u = usuarioRepo.GetUsuarioxIdentity(User.Identity.Name);

                lista = tutRepo.GetTutoriasInscritas(u);
            }
            catch 
            {
                lista = new List<Tutoria>();
            }

            int count = lista.Count;
            int resta = 0;
            for (int i = 0; i < count; i++)
            {
                Tutoria T = lista[i - resta];

                if (T.Fecha.CompareTo(DateTime.Now.AddHours(-1)) == -1)
                {
                    lista.Remove(T);
                    resta++;
                }
            }

            string html = "<style type='text/css'>table.tableizer-table {border: 1px solid #CCC; font-family: Arial, Helvetica, sans-serif; font-size: 12px;} .tableizer-table td {padding: 4px; margin: 3px; border: 1px solid #ccc;}.tableizer-table th {background-color: #91C2F3; color: #FFF; font-weight: bold;}</style><table class='tableizer-table'><tr class='tableizer-firstrow'><th>Curso</th><th>Asignatura</th><th>Tema</th><th>Fecha</th><th>Hora</th><th>Tutor</th><th></th><th></th></tr>";



            foreach (Aprendete.Models.Tutoria T in lista)
            {
                if (T != null)
                {
                    string c = "";

                    if (T.Materia.Asignatura.Curso == 1) c = "1° Básico";
                    if (T.Materia.Asignatura.Curso == 2) c = "2° Básico";
                    if (T.Materia.Asignatura.Curso == 3) c = "3° Básico";
                    if (T.Materia.Asignatura.Curso == 4) c = "4° Básico";
                    if (T.Materia.Asignatura.Curso == 5) c = "5° Básico";
                    if (T.Materia.Asignatura.Curso == 6) c = "6° Básico";
                    if (T.Materia.Asignatura.Curso == 7) c = "7° Básico";
                    if (T.Materia.Asignatura.Curso == 8) c = "8° Básico";
                    if (T.Materia.Asignatura.Curso == 9) c = "I° Medio";
                    if (T.Materia.Asignatura.Curso == 10) c = "II° Medio";
                    if (T.Materia.Asignatura.Curso == 11) c = "III° Medio";
                    if (T.Materia.Asignatura.Curso == 12) c = "IV° Medio";


                    html += "<tr>        <td>" + c + "</td>" +
                                        "<td>" + T.Materia.Asignatura.Nombre + "</td>" +
                                        "<td>" + T.Materia.Nombre + "</td>" +
                                        "<td>" + T.Fecha.ToShortDateString() + "</td>" +
                                        "<td>" + T.Fecha.ToShortTimeString() + "</td>" +
                                        "<td>" + T.Usuario.Nombre+" "+T.Usuario.Apellido+"</td>";

                    if (T.Fecha.CompareTo(DateTime.Now.AddHours(-0.5)) == 1 && T.Fecha.CompareTo(DateTime.Now.AddHours(0.15)) == -1)
                    {
                        html += "<td><a href='https://www.livemeeting.com/cc/LACCIR/join?id=" + T.Sala.Link + "&role=present&pw=j(p2Q{_Nn'>ingresar</a></td>";
                    }
                    else
                    {
                        html += "<td>no disponible</td>";
                    }

                    
                    html += "<td> <input class = 'delete' type='button' name ='"+ T.TutoriaID + "' value='eliminar' /></td></tr>";

                }
            }

            html += "</table>";

            if (lista.Count == 0)
            {
                html = "No se encontraron coincidencias.";
            }

            TempData["tutorias"] = html;

            return View();
        }

        public ActionResult MisTutorias()
        {
            List<Tutoria> lista;
            try
            {
                lista = tutRepo.GetTutoriasUsuario(usuarioRepo.GetUsuarioxIdentity(User.Identity.Name));
                        
            }
            catch 
            {
                lista = new List<Tutoria>();
            }

            int count = lista.Count;
            int resta = 0;
            for (int i = 0; i < count; i++ )
            {
                Tutoria T = lista[i-resta];

                if (T.Fecha.CompareTo(DateTime.Now.AddHours(-1)) == -1)
                {
                    lista.Remove(T);
                    resta++;
                }
            }

            string html = "<style type='text/css'>table.tableizer-table {border: 1px solid #CCC; font-family: Arial, Helvetica, sans-serif; font-size: 12px;} .tableizer-table td {padding: 4px; margin: 3px; border: 1px solid #ccc;}.tableizer-table th {background-color: #91C2F3; color: #FFF; font-weight: bold;}</style><table class='tableizer-table'><tr class='tableizer-firstrow'><th>Curso</th><th>Asignatura</th><th>Tema</th><th>Fecha</th><th>Hora</th><th>Inscritos</th><th></th><th></th></tr>";


            

            foreach (Aprendete.Models.Tutoria T in lista)
            {
                if (T != null)
                {
                    string c = "";

                    if (T.Materia.Asignatura.Curso == 1) c = "1° Básico";
                    if (T.Materia.Asignatura.Curso == 2) c = "2° Básico";
                    if (T.Materia.Asignatura.Curso == 3) c = "3° Básico";
                    if (T.Materia.Asignatura.Curso == 4) c = "4° Básico";
                    if (T.Materia.Asignatura.Curso == 5) c = "5° Básico";
                    if (T.Materia.Asignatura.Curso == 6) c = "6° Básico";
                    if (T.Materia.Asignatura.Curso == 7) c = "7° Básico";
                    if (T.Materia.Asignatura.Curso == 8) c = "8° Básico";
                    if (T.Materia.Asignatura.Curso == 9) c = "I° Medio";
                    if (T.Materia.Asignatura.Curso == 10) c = "II° Medio";
                    if (T.Materia.Asignatura.Curso == 11) c = "III° Medio";
                    if (T.Materia.Asignatura.Curso == 12) c = "IV° Medio";


                    html += "<tr>        <td>" + c + "</td>" +
                                        "<td>" + T.Materia.Asignatura.Nombre + "</td>" +
                                        "<td>" + T.Materia.Nombre + "</td>" +
                                        "<td>" + T.Fecha.ToShortDateString() + "</td>" +
                                        "<td>" + T.Fecha.ToShortTimeString() + "</td>" +
                                        "<td>" + T.Inscritos.Count()+"/"+T.UsuariosMax+ "</td>";

                    if (T.Fecha.CompareTo(DateTime.Now.AddHours(-0.5)) == 1 && T.Fecha.CompareTo(DateTime.Now.AddHours(0.15)) == -1)
                    {
                        html += "<td><a href='https://www.livemeeting.com/cc/LACCIR/join?id=" + T.Sala.Link + "&role=present&pw=zQ*3>=Kxb'>ingresar</a></td>";
                    }
                    else
                    {
                        html += "<td>no disponible</td>";
                    }

                    html += "<td> <input class = 'delete' type='button' name = '" + T.TutoriaID + "' value = 'eliminar' /></td></tr>";

                }
            }
            
            html += "</table>";

            if (lista.Count == 0)
            {
                html = "No se encontraron coincidencias.";
            }
            TempData["tutorias"] = html;
            
            return View();
        }


       [Authorize(Roles = "Usuario")]
        public ActionResult Crear()
        {
            List<int> maxUsuarios = new List<int>();

            for (int i = 1; i < 6; i++)
            {
                maxUsuarios.Add(i);

            }

         
            TempData["maxUsuarios"] = new SelectList(maxUsuarios);


            List<Asignatura> asignaturas = asignRepo.getAsignaturas();
            List<int> cursos = new List<int>();
            
            foreach (Asignatura asignatura in asignaturas)
            {
                if (!cursos.Contains((int)asignatura.Curso))
                {
                    cursos.Add((int)asignatura.Curso);
                }
            }

            string ret = "";
            
            for (int i = 0; i < cursos.Count; i++)
            {
                string c="";

                if (cursos[i] == 1) c = "1° Básico";
                if (cursos[i] == 2) c = "2° Básico";
                if (cursos[i] == 3) c = "3° Básico";
                if (cursos[i] == 4) c = "4° Básico";
                if (cursos[i] == 5) c = "5° Básico";
                if (cursos[i] == 6) c = "6° Básico";
                if (cursos[i] == 7) c = "7° Básico";
                if (cursos[i] == 8) c = "8° Básico";
                if (cursos[i] == 9) c = "I° Medio";
                if (cursos[i] == 10) c = "II° Medio";
                if (cursos[i] == 11) c = "III° Medio";
                if (cursos[i] == 12) c = "IV° Medio";

                ret += "<option value = '" + cursos[i] + "'>" + c + "</option>";
            }

            TempData["listacursos"] = ret;

            return View();
        }
        
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Crear(string fecha, string descripcion, int usuariosMax, int materiaID)
        {


            Usuario actual = usuarioRepo.GetUsuarioxUserName(User.Identity.Name);
            string mes = fecha.Substring(0, 2);
            fecha = fecha.Substring(3, 3) + fecha.Substring(0, 2) + fecha.Substring(5);
            
            DateTime date = DateTime.Parse(fecha);


           if(tutAdmin.CrearTutoria(actual,materiaID,date,descripcion,usuariosMax))
            {
                return RedirectToAction("Index");
            }

            else
            {
                return View(); //Con mensaje de error.

            }
        }


        [Authorize(Roles = "Usuario")]
        public ActionResult Buscar()
        {
            int[] cursos = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
            string ret = "";

            for (int i = 0; i < cursos.Length; i++)
            {
                string c = "";

                if (cursos[i] == 1) c = "1° Básico";
                if (cursos[i] == 2) c = "2° Básico";
                if (cursos[i] == 3) c = "3° Básico";
                if (cursos[i] == 4) c = "4° Básico";
                if (cursos[i] == 5) c = "5° Básico";
                if (cursos[i] == 6) c = "6° Básico";
                if (cursos[i] == 7) c = "7° Básico";
                if (cursos[i] == 8) c = "8° Básico";
                if (cursos[i] == 9) c = "I° Medio";
                if (cursos[i] == 10) c = "II° Medio";
                if (cursos[i] == 11) c = "III° Medio";
                if (cursos[i] == 12) c = "IV° Medio";

                ret += "<option value = '" + cursos[i] + "'>" + c + "</option>";
            }

            TempData["listacursos"] = ret;
            
            
            
            
            
            List<Tutoria> lista = tutRepo.Tutorias();

            string html = "<style type='text/css'>table.tableizer-table {border: 1px solid #CCC; font-family: Arial, Helvetica, sans-serif; font-size: 12px;} .tableizer-table td {padding: 4px; margin: 3px; border: 1px solid #ccc;}.tableizer-table th {background-color: #91C2F3; color: #FFF; font-weight: bold;}</style><table class='tableizer-table'><tr class='tableizer-firstrow'><th>Curso</th><th>Asignatura</th><th>Tema</th><th>Fecha</th><th>Hora</th><th>Tutor</th><th>Cupos</th><th></th></tr>";
            if (lista.Count != 0)
            {
                foreach (Aprendete.Models.Tutoria T in lista)
                {
                    string c = "";

                    if (T.Materia.Asignatura.Curso == 1) c = "1° Básico";
                    if (T.Materia.Asignatura.Curso == 2) c = "2° Básico";
                    if (T.Materia.Asignatura.Curso == 3) c = "3° Básico";
                    if (T.Materia.Asignatura.Curso == 4) c = "4° Básico";
                    if (T.Materia.Asignatura.Curso == 5) c = "5° Básico";
                    if (T.Materia.Asignatura.Curso == 6) c = "6° Básico";
                    if (T.Materia.Asignatura.Curso == 7) c = "7° Básico";
                    if (T.Materia.Asignatura.Curso == 8) c = "8° Básico";
                    if (T.Materia.Asignatura.Curso == 9) c = "I° Medio";
                    if (T.Materia.Asignatura.Curso == 10) c = "II° Medio";
                    if (T.Materia.Asignatura.Curso == 11) c = "III° Medio";
                    if (T.Materia.Asignatura.Curso == 12) c = "IV° Medio";

                    html += "<tr>        <td>" + c + "</td>" +
                                        "<td>" + T.Materia.Asignatura.Nombre + "</td>" +
                                        "<td>" + T.Materia.Nombre + "</td>" +
                                        "<td>" + T.Fecha.ToShortDateString() + "</td>" +
                                        "<td>" + T.Fecha.ToShortTimeString() + "</td>" +
                                        "<td>" + T.Usuario.Nombre + " " + T.Usuario.Apellido + "</td>" +
                                        "<td>" + T.Inscritos.Count() + "/" + T.UsuariosMax + "</td>";

                    if (T.Inscritos.Count() < T.UsuariosMax)
                    {
                        html += "<td><input class = 'inscribir' id = '" + T.TutoriaID + "' type='button' name = '" + T.TutoriaID + "' value='inscribir' /></td></tr>";
                    }
                    else
                    {
                        html += "<td>no disponible</td></tr>";
                    }

                }
            }

            else
            {
                html += "<tr> </tr> <td>Ningún Resultado</td><tr> </tr>";
            }
            html += "</table>";
            
            if (lista.Count == 0)
            {
                html = "No se encontraron coincidencias.";
            }

            TempData["tutorias"] = html;

            return View();
        }
             

        public ActionResult Editar()
        {
            
            return View();
        }





        //MÉTODOS:

        private List<Tutoria> listar(int curso, int asignatura, int materia, string desde, string hasta)
        {
            

            List<Tutoria> lista = tutRepo.Tutorias();

            DateTime cero = new DateTime();
            DateTime fdesde=new DateTime();
            DateTime fhasta = new DateTime();

            if (!desde.Equals("no") && !desde.Equals(""))
            {
                string mes = desde.Substring(0, 2);
                desde = desde.Substring(3, 3) + desde.Substring(0, 2) + desde.Substring(5);

                 fdesde = DateTime.Parse(desde);
                 
            }

            if (!hasta.Equals("no") && !hasta.Equals(""))
            {
                string mes = hasta.Substring(0, 2);
                hasta = hasta.Substring(3, 3) + hasta.Substring(0, 2) + hasta.Substring(5);

                fhasta = DateTime.Parse(hasta);
            }


            int count = lista.Count;
            int resta = 0;
            for (int i = 0; i < count; i++ )
            {
                Tutoria T = lista[i-resta];

                if (curso != 0 && T.Materia.Asignatura.Curso != curso)
                {
                    lista.Remove(T);
                    resta++;

                }

                else if (asignatura != 0 && T.Materia.AsignaturaID != asignatura)
                {
                    lista.Remove(T);
                    resta++;
                }

                else if (materia != 0 && T.MateriaID != materia)
                {
                    lista.Remove(T);
                    resta++;
                }

                else if (!fdesde.Equals(cero) && T.Fecha.CompareTo(fdesde) == -1)
                {
                    lista.Remove(T);
                    resta++;
                }

                else if (!fhasta.Equals(cero) && T.Fecha.CompareTo(fhasta) == 1)
                {
                    lista.Remove(T);
                    resta++;
                }

            }

            return lista;
        }





        // JEYSON'S
        
        [ActionName("filtrar")]
        public JsonResult filtrar(int curso=0, int asignatura=0, int materia=0, string desde="no", string hasta="no")
        {
            List<Tutoria> lista = listar(curso, asignatura, materia, desde, hasta);

            string html = "<style type='text/css'>table.tableizer-table {border: 1px solid #CCC; font-family: Arial, Helvetica, sans-serif; font-size: 12px;} .tableizer-table td {padding: 4px; margin: 3px; border: 1px solid #ccc;}.tableizer-table th {background-color: #91C2F3; color: #FFF; font-weight: bold;}</style><table class='tableizer-table'><tr class='tableizer-firstrow'><th>Curso</th><th>Asignatura</th><th>Tema</th><th>Fecha</th><th>Hora</th><th>Tutor</th><th>Cupos</th><th></th></tr>";
            if (lista.Count != 0)
            {
                foreach (Aprendete.Models.Tutoria T in lista)
                {
                    string c = "";

                    if (T.Materia.Asignatura.Curso == 1) c = "1° Básico";
                    if (T.Materia.Asignatura.Curso == 2) c = "2° Básico";
                    if (T.Materia.Asignatura.Curso == 3) c = "3° Básico";
                    if (T.Materia.Asignatura.Curso == 4) c = "4° Básico";
                    if (T.Materia.Asignatura.Curso == 5) c = "5° Básico";
                    if (T.Materia.Asignatura.Curso == 6) c = "6° Básico";
                    if (T.Materia.Asignatura.Curso == 7) c = "7° Básico";
                    if (T.Materia.Asignatura.Curso == 8) c = "8° Básico";
                    if (T.Materia.Asignatura.Curso == 9) c = "I° Medio";
                    if (T.Materia.Asignatura.Curso == 10) c = "II° Medio";
                    if (T.Materia.Asignatura.Curso == 11) c = "III° Medio";
                    if (T.Materia.Asignatura.Curso == 12) c = "IV° Medio";

                    html += "<tr>        <td>" + c + "</td>" +
                                        "<td>" + T.Materia.Asignatura.Nombre + "</td>" +
                                        "<td>" + T.Materia.Nombre + "</td>" +
                                        "<td>" + T.Fecha.ToShortDateString() + "</td>" +
                                        "<td>" + T.Fecha.ToShortTimeString() + "</td>" +
                                        "<td>" + T.Usuario.Nombre + " " + T.Usuario.Apellido + "</td>" +
                                        "<td>" + T.Inscritos.Count() + "/" + T.UsuariosMax + "</td>";

                    if (T.Inscritos.Count() < T.UsuariosMax)
                    {
                        html += "<td><input class = 'inscribir' id = '" + T.TutoriaID + "' type='button' name = '" + T.TutoriaID + "' value='inscribir' /></td></tr>";
                    }
                    else
                    {
                        html += "<td>no disponible</td></tr>";
                    }

                }
            }

            else
            {
                html += "<tr> </tr> <td>Ningún Resultado</td><tr> </tr>";
            }
            html += "</table>";


            if (lista.Count == 0)
            {
                html = "No se encontraron coincidencias.";
            }

            return this.Json(html, JsonRequestBehavior.AllowGet);
        }


        [ActionName("eliminarInscripcion")]
        public JsonResult eliminarInscripcion(int ID)
        {
            string ret;
            if (inscritoAdmin.DesinscribirUsuario(usuarioRepo.GetUsuarioxIdentity(User.Identity.Name).UsuarioID, ID)) ret = "ok";
            else ret = "no";
            return this.Json(ret, JsonRequestBehavior.AllowGet);
        }


       

        [ActionName("eliminar")]
        public JsonResult eliminar(int ID)
        {
            string ret;
            Tutoria elimi = tutRepo.GetTutoriaxid(ID);

            List<Usuario> lista = new UsuarioRepository().GetUsuariosTutorias(ID);

            foreach (Usuario U in lista)
            {
                inscritoAdmin.DesinscribirUsuario(U.UsuarioID, ID);
            }
            
            elimi.Sala.Usada = false;
            if (tutRepo.Delete(elimi)) ret = "ok";
            else
            {
                elimi.Sala.Usada = true;
                ret = "no";
            }
            return this.Json(ret, JsonRequestBehavior.AllowGet);
        }


        [ActionName("inscribir")]
        public JsonResult inscribir(int ID)
        {
            string ret;

            if (inscritoAdmin.InscribirUsuario(usuarioRepo.GetUsuarioxIdentity(User.Identity.Name).UsuarioID, ID)) ret = "ok";
            else ret = "no";
            return this.Json(ret, JsonRequestBehavior.AllowGet);
        }


        [ActionName("getasignaturas")]
        public JsonResult getasignaturas(int ID)
        {

            List<Asignatura> asignaturas = asignRepo.getAsignaturasxCurso(ID);


            string ret = "";

            foreach (Asignatura asignatura in asignaturas)
            {
                ret += "<option value = '" + asignatura.AsignaturaID + "'>" + asignatura.Nombre + "</option>";
            }



            return this.Json(ret, JsonRequestBehavior.AllowGet);
        }


        [ActionName("getmaterias")]
        public JsonResult getmaterias(int ID)
        {
            List<Materia> materias = asignRepo.getMateriaxAsignatura(ID);


            string ret = "";

            foreach (Materia materia in materias)
            {
                ret += "<option value = '" + materia.MateriaID + "'>" + materia.Nombre + "</option>";
            }


            return this.Json(ret, JsonRequestBehavior.AllowGet);
        }







    }
}
